home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / ARGONET / PD / FILER / SMART.ZIP / !SmartDir / !Help next >
Text File  |  1998-03-04  |  8KB  |  197 lines

  1. ________________________________________________________________________
  2.  
  3. Program Name:   SmartOpenDir
  4. Purpose:        Intelligent directory opener
  5. Author:         Tony Houghton
  6. Version:        0.23 (4 March 1997)
  7. Requirements:   RISC OS 3.1 or later
  8. Status:         Freeware
  9. ________________________________________________________________________
  10.  
  11. Contact details:
  12.  
  13. Tony Houghton
  14. 271 Upper Weston Lane
  15. Woolston
  16. Southampton
  17. SO19 9HY
  18.  
  19. mailto:tonyh@tcp.co.uk
  20. URL:http://homepages.tcp.co.uk/~tonyh/
  21. ________________________________________________________________________
  22.  
  23.  
  24. Licence
  25. _______
  26.  
  27. You may freely use, copy and distribute SmartOpenDir provided files are left
  28. unaltered; distribution without the source code is permitted. It may not be
  29. sold for profit beyond normal costs of PD distribution, PD collection CDs or
  30. magazine cover discs. Permission may be granted to bundle SmartOpenDir with
  31. commercial packages, but please ask me first. Source may be reused with
  32. permission.
  33.  
  34. Overview
  35. ________
  36.  
  37. In general I prefer to use the default options in my filer display, but for
  38. some directories it's more useful to use small icons or full info or sort by
  39. date etc. SmartOpenDir allows this to be done automatically by matching any
  40. directory about to be opened against a set of wildcarded patterns and setting
  41. the filer display options immediately before displaying it.
  42.  
  43. SmartOpenDir isn't especially user-friendly to configure, but the philosophy
  44. behind it, apart from doing its job as seamlessly as possible, is to achieve
  45. it with minimum programming effort, so the user has to do some of the
  46. calculation of values that might otherwise be left to the program. The source
  47. is provided for anyone who might want to work on improvements in this area.
  48.  
  49. Loading
  50. _______
  51.  
  52. It's set up as an application, !SmartDir, which automatically loads the
  53. module with its default Patterns file when run. This is ideal for adding to a
  54. Risc PC boot sequence.
  55.  
  56. If you want to load the module "manually", uase a line like the following:
  57.  
  58. RMLoad SmartDir [-a] [-f <Patterns filename>]
  59.  
  60. Both optional parameters are recommended. -a causes an alias to be set for
  61. Filer_OpenDir, redirecting it to the SmartOpenDir command, which is an
  62. extended version of Filer_OpenDir, opening directories intelligently. If set,
  63. the alias will automatically be reset when the module is killed. The Patterns
  64. filename following the -f parameter is a text file containing a list of
  65. wildcarded directory patterns and their corresponding filer options.
  66.  
  67. Commands provided
  68. _________________
  69.  
  70. SmartOpenDir                    Extended Filer_OpenDir with pattern matching
  71. SmartOpenDirLoad <filename>     Loads a replacement Patterns file
  72.  
  73. Patterns file syntax
  74. ____________________
  75.  
  76. A Patterns file is a text file with one or more lines of the following
  77. syntax:
  78.  
  79. Pattern         Code
  80.  
  81. Only lines of this form are permitted, do not include any blank lines. Any
  82. number of tabs or spaces may be used between fields. Patterns are matched on
  83. a first matched first used basis, so a specific pattern can be included
  84. before a more general pattern which would otherwise include the specific one.
  85.  
  86. The Pattern consists of a directory name with the following wildcards:
  87.  
  88.   #     Match any single character
  89.   *     Match any number of characters
  90.   %     Match until the next directory separator (.) or end of filename
  91.  
  92. The Code consists of two hexadecimal digits, affecting bits 0-3 of a flags
  93. word. The first digit is the mask. Any bits set in the mask cause the
  94. corresponding bits to be cleared in the flags. The second digit is the value
  95. to be ORed with the masked flags value. The bits have the following meaning:
  96.  
  97. Bits 0-1: Icon options  0     = Large icons
  98.                         1     = Small icons
  99.                         2     = Full info
  100.                         3     = Reserved
  101. Bits 2-3: Sort options  0     = Sort by name
  102.                         1 (4) = Sort by type
  103.                         2 (8) = Sort by size
  104.                         3 (C) = Sort by date
  105.  
  106. Therefore the only values likely to be useful for the mask are:
  107.  
  108.         0       leave everything alone
  109.         3       affect icon display options only
  110.         C       affect sort options only
  111.         F       affect display and sort options
  112.  
  113. Look at the supplied patterns file for examples. The first 8 patterns are for
  114. C source and header directories etc, opening them with small icons. The
  115. second !NewsDir entry is for Newsbase's "debug" backup news and mail folders,
  116. opening them with small icons and sorted by date. Read on for an explanation
  117. of the last option.
  118.  
  119. Extended options
  120. ________________
  121.  
  122. SmartOpenDir now has one special case which uses extra digits in the code.
  123. The extended code takes the form:
  124.  
  125. 1nnppqq
  126.  
  127. where nn, pp and qq are 2-digit hexadecimal values. In this case, the action
  128. for matching directories is to open as if the code were pp unless the number
  129. of files (or subdirectories) in the directory exceeds the given threshold, in
  130. which case it is opened as for code qq.
  131.  
  132. The final line in the supplied Patterns file dictates that if any directory
  133. which hasn't already been matched is opened, then if it contains more than 24
  134. (&18) objects it will be opened with small icons, otherwise it will use the
  135. configured options.
  136.  
  137. Precautions
  138. ___________
  139.  
  140. Nothing special, but SmartOpenDir gives you one more reason to shut down the
  141. computer properly before switching off; otherwise the last directory opened
  142. could end up leaving the configuration set that way.
  143.  
  144. If you manually click any option in the Filer Display submenu, all subsequent
  145. directories will be opened with *all* of the display options as set in that
  146. menu, which may have been affected by SmartOpenDir whose effect was intended
  147. to be temporary.
  148.  
  149. If using the -a option, it will clash with any other aliases set for
  150. Filer_OpenDir.
  151.  
  152. Acknowledgements
  153. ________________
  154.  
  155. SmartOpenDir was inspired by Ian Clark's SmallDir. It had a number of
  156. limitations though, and after some experiments it became clear that a
  157. completely different approach was needed.
  158.  
  159. Technical details
  160. _________________
  161.  
  162. First let me say that SmartOpenDir is a module, which does not have
  163. particularly complex or extensive code, written in C. Some may consider this
  164. a flagrant breach of RISC OS programming ettiquette, but I have some points
  165. to make in my defence:
  166.  
  167.   The module is under 12K in size, and its total memory use is less than the
  168.   minimum size of 32K required by a USR-mode task on a 4MB Archimedes.
  169.  
  170.   If I'd had to worry about the intricacies of assembler, I might not have
  171.   bothered writing it at all, and it certainly wouldn't have got done so
  172.   quickly.
  173.  
  174.   Writing a module in C was a useful learning exercise, which I intend to
  175.   share, time permitting.
  176.  
  177. SmartOpenDir uses a "two-pronged attack" to ensure that all directories get
  178. opened intelligently and as seamlessly as possible.
  179.  
  180. Its first line of attack is to implement a new command to replace
  181. Filer_OpenDir, and redirect the original command to it using an alias. The
  182. Filer itself does not use the command when opening a directory when
  183. double-clicked on etc, or when Adjust-clicking a close icon, so
  184. SmartOpenDir's second line of attack is to filter events being sent to the
  185. Filer.
  186.  
  187. Either way, when a directory is about to be opened it temporarily
  188. reconfigures the computer to use the relevant options, resetting the
  189. configuration the next time the filer receives an event.
  190.  
  191. SmartOpenDir used to "cheat" a little to find whether the number of objects
  192. in a directory was above or below a given value, using a single SWI with a
  193. reasonably small buffer. This was found to cause crashes when used with CDFS,
  194. so I've switched to a longer-winded approach. Fortunately this does not seem
  195. to cause any delay at opening directories in practice, thanks to directory
  196. caching.
  197.